/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.uca.sisbec.helpers.manto;

import com.uca.sisbec.commons.Utils;
import com.uca.sisbec.forms.manto.UsuarioForm;
import com.uca.sisbec.mapping.Rol;
import com.uca.sisbec.mapping.Usuario;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Expression;

/**
 *
 * @author Juank
 */
public class UsuarioHelper {
    private Session session;
    
    public UsuarioHelper(Session session){
        this.session = session;
    }
    
    public List<Rol> getRoles(){
        Criteria crit = session.createCriteria(Rol.class);
        return crit.list();
    }

    public boolean validateUsuario(UsuarioForm uf) {
        if (buscarUsuario(uf.getUser()) == null)
            return true;
        return false;
    }

    public Usuario buscarUsuario(String user) {
        Usuario usu = (Usuario)session.get(Usuario.class, user);
        return usu;
    }

    public void insertarUsuario(UsuarioForm uf) {
        Usuario user = new Usuario();
        user.setAlias(uf.getUser());
        user.setContrasenia(Utils.encriptarMD5(uf.getPass()));
        user.setNombres(uf.getNombres());
        user.setApellidos(uf.getApellidos());
        user.setEmail(uf.getEmail());
        if (!Utils.isNullOrEmpty(uf.getRol()))
            user.setRol((Rol) session.get(Rol.class, Integer.parseInt(uf.getRol())));
        user.setEstado((uf.isEstado()) ? "A" : "I");
        user.setFondo(uf.getFondo());
        user.setChgPass("Y");
        session.save(user);
    }

    public void modificarUsuario(UsuarioForm uf) {
        Usuario user = buscarUsuario(uf.getUser());
        user.setAlias(uf.getUser());
        if (!Utils.isNullOrEmpty(uf.getPass())){
            user.setContrasenia(Utils.encriptarMD5(uf.getPass()));
            user.setChgPass("Y");
        }
        user.setNombres(uf.getNombres());
        user.setApellidos(uf.getApellidos());
        user.setEmail(uf.getEmail());
        if (!Utils.isNullOrEmpty(uf.getRol()))
            user.setRol((Rol) session.get(Rol.class, Integer.parseInt(uf.getRol())));
        user.setEstado((uf.isEstado()) ? "A" : "I");
        user.setFondo(uf.getFondo());
        session.update(user);
    }

    public List<Usuario> buscarUsuarios(UsuarioForm uf) {
        Criteria crit = session.createCriteria(Usuario.class)
                .add(Expression.conjunction()
                .add(Expression.like("nombres", "%" + uf.getNombres() + "%"))
        	.add(Expression.like("apellidos", "%" + uf.getApellidos() + "%"))
        	.add(Expression.like("alias", "%" + uf.getUser() + "%")));
        List<Usuario> listUser = new ArrayList<Usuario>(crit.list());
        return listUser;
    }

    public void buscarUsuarioToForm(String user, UsuarioForm uf) {
        Usuario usu = buscarUsuario(user);
        if (usu != null) {
            uf.setUser(usu.getAlias());
            uf.setNombres(usu.getNombres());
            uf.setApellidos(usu.getApellidos());
            uf.setEmail(usu.getEmail());
            uf.setEstado(usu.getEstado().equals("A"));
            uf.setRol(Integer.toString(usu.getRol().getIdRol()));
            uf.setFondo(usu.getFondo());
        }
    }

    public void changePassword(String passNew, Usuario usuario) {
        usuario.setContrasenia(Utils.encriptarMD5(passNew));
        usuario.setChgPass("N");
        session.update(usuario);
    }
}
